package william.bit;

/**
 * @author ZhangShenao
 * @date 2024/2/21
 * @description <a href="https://leetcode.cn/problems/hamming-distance/description/">...</a>
 */
public class Leetcode461_汉明距离 {
    /**
     * 本质上是将x,y两数异或,然后计算异或结果中有几个1
     * 利用性质: n=n&(n-1) 可以清除n最右侧的1
     * 针对异或结果xor: 判断xor&(xor-1)经过多少次到达0,就是有多少个1
     */
    public int hammingDistance(int x, int y) {
        int distance = 0;

        //将两数异或,计算异或结果中有几个0
        int xor = x ^ y;
        while (xor != 0) {
            ++distance;
            xor = xor & (xor - 1);  // xor & (xor - 1)操作可以去除xor中最右侧的1
        }

        return distance;
    }
}
